home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / misc / bgui12.lha / demos / BGUIPlayer / PlayerGUI.c < prev    next >
C/C++ Source or Header  |  1995-07-22  |  13KB  |  495 lines

  1. /*
  2.  *    PLAYERGUI.C
  3.  */
  4.  
  5. #include "BGUIPlayer.h"
  6.  
  7. /*
  8.  *    Play button image.
  9.  */
  10. static struct VectorItem Play[] = {
  11.     {    25,    11,    VIF_SCALE                  },
  12.     {    5,    2,    VIF_MOVE | VIF_AREASTART          },
  13.     {    5,    5,    VIF_DRAW | VIF_XRELRIGHT          },
  14.     {    5,    5,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  15.     {    5,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  16.     {    5,    2,    VIF_DRAW | VIF_LASTITEM                   }
  17. };
  18.  
  19. /*
  20.  *    Pause button image.
  21.  */
  22. static struct VectorItem Pause[] = {
  23.     {    25,    11,    VIF_SCALE                  },
  24.     {    9,    3,    VIF_MOVE | VIF_AREASTART          },
  25.     {    11,    3,    VIF_DRAW                  },
  26.     {    11,    3,    VIF_DRAW | VIF_YRELBOTTOM          },
  27.     {    9,    3,    VIF_DRAW | VIF_YRELBOTTOM          },
  28.     {    9,    3,    VIF_DRAW | VIF_AREAEND              },
  29.     {    9,    3,    VIF_MOVE | VIF_AREASTART | VIF_XRELRIGHT  },
  30.     {    11,    3,    VIF_DRAW | VIF_XRELRIGHT          },
  31.     {    11,    3,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  32.     {    9,    3,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  33.     {    9,    3,    VIF_DRAW | VIF_XRELRIGHT | VIF_LASTITEM   }
  34. };
  35.  
  36. /*
  37.  *    Stop button image.
  38.  */
  39. static struct VectorItem Stop[] = {
  40.     {    25,    11,    VIF_SCALE                  },
  41.     {    9,    3,    VIF_MOVE | VIF_AREASTART          },
  42.     {    9,    3,    VIF_DRAW | VIF_XRELRIGHT          },
  43.     {    9,    3,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  44.     {    9,    3,    VIF_DRAW | VIF_YRELBOTTOM          },
  45.     {    9,    3,    VIF_DRAW | VIF_LASTITEM                   }
  46. };
  47.  
  48. /*
  49.  *    Previous button image.
  50.  */
  51. static struct VectorItem Previous[] = {
  52.     {    25,    11,    VIF_SCALE                  },
  53.     {    8,    2,    VIF_MOVE | VIF_AREASTART          },
  54.     {    9,    2,    VIF_DRAW                  },
  55.     {    9,    5,    VIF_DRAW                  },
  56.     {    10,    5,    VIF_DRAW                  },
  57.     {    9,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  58.     {    8,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  59.     {    8,    2,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  60.     {    9,    2,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  61.     {    10,    5,    VIF_DRAW | VIF_YRELBOTTOM          },
  62.     {    9,    5,    VIF_DRAW | VIF_YRELBOTTOM          },
  63.     {    9,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  64.     {    8,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  65.     {    8,    2,    VIF_DRAW | VIF_LASTITEM                   }
  66. };
  67.  
  68. /*
  69.  *    Next button image.
  70.  */
  71. static struct VectorItem Next[] = {
  72.     {    25,    11,    VIF_SCALE                  },
  73.     {    8,    2,    VIF_MOVE | VIF_AREASTART | VIF_XRELRIGHT  },
  74.     {    9,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  75.     {    9,    5,    VIF_DRAW | VIF_XRELRIGHT          },
  76.     {    10,    5,    VIF_DRAW | VIF_XRELRIGHT          },
  77.     {    9,    2,    VIF_DRAW                  },
  78.     {    8,    2,    VIF_DRAW                  },
  79.     {    8,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  80.     {    9,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  81.     {    10,    5,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  82.     {    9,    5,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  83.     {    9,    2,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  84.     {    8,    2,    VIF_DRAW | VIF_YRELBOTTOM | VIF_XRELRIGHT },
  85.     {    8,    2,    VIF_DRAW | VIF_LASTITEM | VIF_XRELRIGHT   }
  86. };
  87.  
  88. /*
  89.  *    Backward button image.
  90.  */
  91. static struct VectorItem Backward[] = {
  92.     {    25,    11,    VIF_SCALE                  },
  93.     {    5,    5,    VIF_MOVE | VIF_AREASTART          },
  94.     {    12,    2,    VIF_DRAW                  },
  95.     {    12,    5,    VIF_DRAW                  },
  96.     {    5,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  97.     {    5,    2,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  98.     {    12,    5,    VIF_DRAW | VIF_YRELBOTTOM          },
  99.     {    12,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  100.     {    5,    5,    VIF_DRAW | VIF_YRELBOTTOM | VIF_LASTITEM  }
  101. };
  102.  
  103. /*
  104.  *    Forward button image.
  105.  */
  106. static struct VectorItem Forward[] = {
  107.     {    25,    11,    VIF_SCALE                  },
  108.     {    5,    5,    VIF_MOVE | VIF_AREASTART | VIF_XRELRIGHT  },
  109.     {    12,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  110.     {    12,    5,    VIF_DRAW | VIF_XRELRIGHT          },
  111.     {    5,    2,    VIF_DRAW                  },
  112.     {    5,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  113.     {    12,    5,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  114.     {    12,    2,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  115.     {    5,    5,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM | VIF_LASTITEM  }
  116. };
  117.  
  118. /*
  119.  *    Eject button image.
  120.  */
  121. static struct VectorItem Eject[] = {
  122.     {    25,    11,    VIF_SCALE                  },
  123.     {    12,    2,    VIF_MOVE | VIF_AREASTART          },
  124.     {    11,    2,    VIF_DRAW | VIF_XRELRIGHT          },
  125.     {    6,    5,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  126.     {    6,    5,    VIF_DRAW | VIF_YRELBOTTOM          },
  127.     {    12,    2,    VIF_DRAW | VIF_AREAEND              },
  128.     {    6,    3,    VIF_MOVE | VIF_AREASTART | VIF_YRELBOTTOM },
  129.     {    6,    3,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  130.     {    6,    2,    VIF_DRAW | VIF_XRELRIGHT | VIF_YRELBOTTOM },
  131.     {    6,    2,    VIF_DRAW | VIF_YRELBOTTOM          },
  132.     {    6,    3,    VIF_DRAW | VIF_YRELBOTTOM | VIF_LASTITEM  }
  133. };
  134.  
  135. /*
  136.  *    Simple macros to create a
  137.  *    vector image button/Toggle.
  138.  */
  139. #define VectorButton( v, i )\
  140.     ButtonObject,\
  141.         ButtonFrame,\
  142.         VIT_VectorArray,    v,\
  143.         GA_ID,            i,\
  144.     EndObject
  145.  
  146. #define VectorToggle( v, i )\
  147.     ButtonObject,\
  148.         ButtonFrame,\
  149.         VIT_VectorArray,    v,\
  150.         GA_ID,            i,\
  151.         GA_ToggleSelect,    TRUE,\
  152.     EndObject
  153.  
  154. /*
  155.  *    Create the control panel.
  156.  */
  157. Prototype Object *GO_Pause;
  158.  
  159. Object *GO_Pause;
  160.  
  161. static Object *CreateControlPanel( void )
  162. {
  163.     Object            *master;
  164.  
  165.     /*
  166.      *    Create the control panel which
  167.      *    contains, from left to right:
  168.      *
  169.      *    Play, Pause, Stop, Previous, Next, Backward, Forward, Eject.
  170.      */
  171.     master = HGroupObject,
  172.         StartMember, VectorButton( Play,     ID_PLAY     ), EndMember,
  173.         StartMember, GO_Pause = VectorToggle( Pause,    ID_PAUSE    ), EndMember,
  174.         StartMember, VectorButton( Stop,     ID_STOP     ), EndMember,
  175.         StartMember, VectorButton( Previous, ID_PREV     ), EndMember,
  176.         StartMember, VectorButton( Next,     ID_NEXT     ), EndMember,
  177.         StartMember, VectorButton( Backward, ID_BACKWARD ), EndMember,
  178.         StartMember, VectorButton( Forward,  ID_FORWARD  ), EndMember,
  179.         StartMember, VectorButton( Eject,    ID_EJECT     ), EndMember,
  180.     EndObject;
  181.  
  182.     return( master );
  183. }
  184.  
  185. /*
  186.  *    Create the track selection group.
  187.  */
  188. #define TrackButton( l, i, d )\
  189.     ButtonObject,\
  190.         LAB_Label,    l,\
  191.         GA_ID,        i,\
  192.         ButtonFrame,\
  193.         GA_Disabled,    d,\
  194.     EndObject
  195.  
  196. Prototype Object *TrackButtons[ 20 ];
  197.  
  198. static UBYTE *Tracks[] = { "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20" };
  199. Object *TrackButtons[ 20 ];
  200.  
  201. static Object *CreateTrackPanel( void )
  202. {
  203.     Object        *master, *row[ 4 ];
  204.     UWORD         i, a, j;
  205.     BOOL         fail = FALSE;
  206.  
  207.     /*
  208.      *    First we create a horizontal master group.
  209.      */
  210.     if ( master = BGUI_NewObject( BGUI_GROUP_GADGET, GROUP_Style, GRSTYLE_VERTICAL, TAG_END )) {
  211.         /*
  212.          *    Then four rows of 5 buttons each.
  213.          */
  214.         for ( a = 0, i = 0; a < 4; a++ ) {
  215.             if ( row[ a ] = BGUI_NewObject( BGUI_GROUP_GADGET, GROUP_Style, GRSTYLE_HORIZONTAL, GROUP_EqualWidth, TRUE, TAG_END )) {
  216.                 /*
  217.                  *    Then the buttons.
  218.                  */
  219.                 for ( j = 0; j < 5; j++, i++ ) {
  220.                     if ( ! DoMethod( row[ a ], GRM_ADDMEMBER, TrackButtons[ i ] = TrackButton( Tracks[ i ], i + 1, i < TOCNumTracks ? FALSE : TRUE ), TAG_END )) {
  221.                         fail = TRUE;
  222.                         break;
  223.                     }
  224.                 }
  225.                 if ( ! DoMethod( master, GRM_ADDMEMBER, row[ a ], TAG_END )) {
  226.                     fail = TRUE;
  227.                     break;
  228.                 }
  229.                 if ( fail ) break;
  230.             } else {
  231.                 fail = TRUE;
  232.                 break;
  233.             }
  234.         }
  235.         if ( fail ) {
  236.             DisposeObject( master );
  237.             master = NULL;
  238.         }
  239.     }
  240.     return( master );
  241. }
  242.  
  243. /*
  244.  *    Simple macros for display objects.
  245.  */
  246. #define TwoDigit\
  247.     IndicatorObject,\
  248.         INDIC_Min,        0,\
  249.         INDIC_Max,        99,\
  250.         INDIC_FormatString,    "%02ld",\
  251.         INDIC_Justification,    IDJ_CENTER,\
  252.     EndObject
  253.  
  254. #define TwoDigitRight\
  255.     IndicatorObject,\
  256.         INDIC_Min,        0,\
  257.         INDIC_Max,        99,\
  258.         INDIC_FormatString,    "%02ld",\
  259.         INDIC_Justification,    IDJ_RIGHT,\
  260.     EndObject
  261.  
  262. #define TwoDigitColon\
  263.     IndicatorObject,\
  264.         INDIC_Min,        0,\
  265.         INDIC_Max,        99,\
  266.         INDIC_FormatString,    ":%02ld",\
  267.     EndObject
  268.  
  269. #define InfoTitle( t )\
  270.     InfoObject,\
  271.         INFO_TextFormat,    t,\
  272.         INFO_HorizOffset,    0,\
  273.         INFO_VertOffset,    0,\
  274.         INFO_FixTextWidth,    TRUE,\
  275.     EndObject
  276.  
  277. /*
  278.  *    Create the Display panel. The display panel
  279.  *    consists of several indicator and info
  280.  *    objects.
  281.  */
  282. Prototype Object    *GO_Track, *GO_Index, *GO_TimeA, *GO_TimeB, *GO_TogoA, *GO_TogoB, *GO_TotalA, *GO_TotalB, *GO_Title, *GO_TrackTitle;
  283. Prototype ULONG         TrackID, IndexID, TimeIDA, TimeIDB, TogoIDA, TogoIDB, TotalIDA, TotalIDB;
  284.  
  285. Object *GO_Track,        /* Track indicator.            */
  286.        *GO_Index,        /* Index indicator.            */
  287.        *GO_TimeA,        /* Minutes passed digits.        */
  288.        *GO_TimeB,        /* Seconds passed digits.        */
  289.        *GO_TogoA,        /* Minutes to go digits.        */
  290.        *GO_TogoB,        /* Seconds to go digits.        */
  291.        *GO_TotalA,        /* Total disk minute digits.        */
  292.        *GO_TotalB,        /* Total disk second digits.        */
  293.        *GO_Title,        /* Disk title.                */
  294.        *GO_TrackTitle;        /* Artist/Track playing.        */
  295.  
  296. ULONG  TrackID, IndexID, TimeIDA, TimeIDB, TogoIDA, TogoIDB, TotalIDA, TotalIDB;
  297.  
  298. static Object *CreateDisplayPanel( void )
  299. {
  300.     Object            *master;
  301.  
  302.     master = VGroupObject, Spacing( 2 ), HOffset( 4 ), VOffset( 2 ),
  303.         FRM_Type,    FRTYPE_BUTTON,
  304.         FRM_Recessed,    TRUE,
  305.         StartMember,
  306.             VGroupObject, Spacing( 2 ),
  307.                 StartMember,
  308.                     HGroupObject, Spacing( 2 ),
  309.                         StartMember,
  310.                             VGroupObject, GROUP_EqualWidth, TRUE,
  311.                                 StartMember, InfoTitle( ISEQ_C "Track" ), EndMember,
  312.                                 StartMember, GO_Track = TwoDigit, EndMember,
  313.                             EndObject,
  314.                         EndMember,
  315.                         StartMember,
  316.                             VGroupObject, GROUP_EqualWidth, TRUE,
  317.                                 StartMember, InfoTitle( ISEQ_C "Index" ), EndMember,
  318.                                 StartMember, GO_Index = TwoDigit, EndMember,
  319.                             EndObject,
  320.                         EndMember,
  321.                         StartMember,
  322.                             VGroupObject, GROUP_EqualWidth, TRUE,
  323.                                 StartMember, InfoTitle( ISEQ_C "Time" ), EndMember,
  324.                                 StartMember,
  325.                                     HGroupObject,
  326.                                         StartMember, GO_TimeA = TwoDigitRight, EndMember,
  327.                                         StartMember, GO_TimeB = TwoDigitColon, EndMember,
  328.                                     EndObject,
  329.                                 EndMember,
  330.                             EndObject,
  331.                         EndMember,
  332.                         StartMember,
  333.                             VGroupObject, GROUP_EqualWidth, TRUE,
  334.                                 StartMember, InfoTitle( ISEQ_C "To go" ), EndMember,
  335.                                 StartMember,
  336.                                     HGroupObject,
  337.                                         StartMember, GO_TogoA = TwoDigitRight, EndMember,
  338.                                         StartMember, GO_TogoB = TwoDigitColon, EndMember,
  339.                                     EndObject,
  340.                                 EndMember,
  341.                             EndObject,
  342.                         EndMember,
  343.                         StartMember,
  344.                             VGroupObject, GROUP_EqualWidth, TRUE,
  345.                                 StartMember, InfoTitle( ISEQ_C "Total" ), EndMember,
  346.                                 StartMember,
  347.                                     HGroupObject,
  348.                                         StartMember, GO_TotalA = TwoDigitRight, EndMember,
  349.                                         StartMember, GO_TotalB = TwoDigitColon, EndMember,
  350.                                     EndObject,
  351.                                 EndMember,
  352.                             EndObject,
  353.                         EndMember,
  354.                     EndObject,
  355.                 EndMember,
  356.                 StartMember, HorizSeperator, EndMember,
  357.                 StartMember,
  358.                     GO_Title = InfoObject,
  359.                         INFO_HorizOffset,    0,
  360.                         INFO_VertOffset,    0,
  361.                         INFO_TextFormat,    Status == SCSI_STAT_NO_DISK ? "<NO DISK>" : DiskName,
  362.                     EndObject,
  363.                 EndMember,
  364.                 StartMember,
  365.                     GO_TrackTitle = InfoObject,
  366.                         INFO_HorizOffset,    0,
  367.                         INFO_VertOffset,    0,
  368.                         INFO_TextFormat,    Status == SCSI_STAT_NO_DISK ? "" : ( Status == SCSI_STAT_STOPPED ? Artist : &DiskTracks[ Track - 1 ][ 0 ] ),
  369.                     EndObject,
  370.                 EndMember,
  371.             EndObject,
  372.         EndMember,
  373.     EndObject;
  374.  
  375.     return( master );
  376. }
  377.  
  378. /*
  379.  *    Export data.
  380.  */
  381. Prototype Object    *WO_Player, *GO_Volume;
  382. Prototype struct Window *Player;
  383. Prototype ULONG          PlayerSig;
  384.  
  385. Object            *WO_Player, *GO_Volume, *GO_Hide, *GO_Quit;
  386. struct Window        *Player;
  387. ULONG             PlayerSig;
  388.  
  389. /*
  390.  *    Main window menus.
  391.  */
  392. static struct NewMenu MainMenus[] = {
  393.     Title( "Project" ),
  394.         Item( "Inquire...",     "I",    ID_INQUIRE ),
  395.         Item( "About...",       "?",    ID_ABOUT   ),
  396.         ItemBar,
  397.         Item( "Edit CD...",     "E",    ID_EDIT    ),
  398.         ItemBar,
  399.         Item( "Hide",           "H",    ID_HIDE    ),
  400.         Item( "Quit",           "Q",    ID_QUIT    ),
  401.     End
  402. };
  403.  
  404. /*
  405.  *    Open up the player window.
  406.  */
  407. Prototype BOOL OpenPlayerWindow( BOOL );
  408.  
  409. BOOL OpenPlayerWindow( BOOL open )
  410. {
  411.     /*
  412.      *    Object created yet?
  413.      */
  414.     if ( ! WO_Player ) {
  415.         /*
  416.          *    No. Create it.
  417.          */
  418.         WO_Player = WindowObject,
  419.             WINDOW_Title,            VERS " (" DATE ")",
  420.             WINDOW_AutoAspect,        TRUE,
  421.             WINDOW_SmartRefresh,        TRUE,
  422.             WINDOW_LockHeight,        TRUE,
  423.             WINDOW_MenuStrip,        MainMenus,
  424.             WINDOW_PubScreenName,        PubScreen,
  425.             WINDOW_SharedPort,        SharedPort,
  426.             WINDOW_MasterGroup,
  427.                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  428.                     StartMember,
  429.                         HGroupObject, Spacing( 4 ), HOffset( 4 ), VOffset( 4 ),
  430.                             FRM_Type,    FRTYPE_BUTTON,
  431.                             FRM_Recessed,    TRUE,
  432.                             StartMember,
  433.                                 VGroupObject, Spacing( 2 ),
  434.                                     StartMember,
  435.                                         CreateDisplayPanel(),
  436.                                     EndMember,
  437.                                     StartMember,
  438.                                         CreateControlPanel(), FixMinHeight,
  439.                                     EndMember,
  440.                                     StartMember,
  441.                                         VGroupObject, HOffset( 4 ), VOffset( 4 ),
  442.                                             FRM_Type,    FRTYPE_BUTTON,
  443.                                             FRM_Recessed,    TRUE,
  444.                                             VarSpace( DEFAULT_WEIGHT ),
  445.                                             StartMember, GO_Volume = KeyHorizSlider( "_Volume:", 1, 255, 255, ID_VOLUME ), FixMinHeight, EndMember,
  446.                                             VarSpace( DEFAULT_WEIGHT ),
  447.                                         EndObject,
  448.                                     EndMember,
  449.                                 EndObject,
  450.                             EndMember,
  451.                             StartMember, CreateTrackPanel(), EndMember,
  452.                         EndObject,
  453.                     EndMember,
  454.                     StartMember,
  455.                         HGroupObject, Spacing( 2 ),
  456.                             StartMember, GO_Hide = KeyButton( "_Hide", ID_HIDE ), EndMember,
  457.                             VarSpace( DEFAULT_WEIGHT ),
  458.                             StartMember, GO_Quit = KeyButton( "_Quit", ID_QUIT ), EndMember,
  459.                         EndObject,
  460.                     EndMember,
  461.                 EndObject,
  462.         EndObject;
  463.  
  464.         if ( WO_Player ) {
  465.             GadgetKey( WO_Player, GO_Hide,     "h" );
  466.             GadgetKey( WO_Player, GO_Quit,     "q" );
  467.             GadgetKey( WO_Player, GO_Volume, "v" );
  468.             DisableMenu( WO_Player, ID_EDIT, Status == SCSI_STAT_NO_DISK ? TRUE : FALSE );
  469.         }
  470.     }
  471.  
  472.     if ( WO_Player && open ) {
  473.         /*
  474.          *    Open the window.
  475.          */
  476.         if ( Player = WindowOpen( WO_Player )) {
  477.             GetAttr( WINDOW_SigMask, WO_Player, &PlayerSig );
  478.             return( TRUE );
  479.         }
  480.     }
  481.     return( FALSE );
  482. }
  483.  
  484. /*
  485.  *    Close the player window.
  486.  */
  487. Prototype VOID ClosePlayerWindow( void );
  488.  
  489. VOID ClosePlayerWindow( void )
  490. {
  491.     WindowClose( WO_Player );
  492.     Player = NULL;
  493.     PlayerSig = 0L;
  494. }
  495.